#!/bin/zsh

# 安装脚本 (imgresizer)
# 用户执行命令: /bin/zsh -c "$(curl -fsSL https://gitee.com/your_account/imgresizer/raw/master/install.sh)"

# 常量设置
REPO_URL="git@gitee.com:yfjlovezm/imgresizer.git"
INSTALL_DIR="$HOME/.imgresizer"
BIN_PATH="/usr/local/bin/imgresizer"
COLOR_RED="\033[31m"
COLOR_GREEN="\033[32m"
COLOR_YELLOW="\033[33m"
COLOR_BLUE="\033[34m"
COLOR_RESET="\033[0m"

# 检查工具是否已安装
check_installed() {
    if [ -d "$INSTALL_DIR" ] && [ -f "$BIN_PATH" ]; then
        echo "${COLOR_YELLOW}⚠️ 检测到已安装的imgresizer，需要更新吗？[y/N]${COLOR_RESET}"
        read -r response
        if [[ "$response" =~ ^([yY][eE][sS]|[yY])+$ ]]; then
            update_tool
            exit 0
        else
            echo "取消操作"
            exit 0
        fi
    fi
}

# 安装依赖
install_dependencies() {
    echo "${COLOR_BLUE}🔍 检查系统依赖...${COLOR_RESET}"
    
    # 检查Node.js
    if ! command -v node &> /dev/null; then
        echo "${COLOR_RED}❌ Node.js未安装，正在安装...${COLOR_RESET}"
        
        # macOS使用Homebrew安装
        if [[ "$OSTYPE" == "darwin"* ]]; then
            if ! command -v brew &> /dev/null; then
                echo "正在安装Homebrew..."
                /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
            fi
            brew install node
        # Linux使用系统包管理器
        elif [[ -f "/etc/debian_version" ]]; then
            sudo apt update
            sudo apt install -y nodejs npm
        elif [[ -f "/etc/redhat-release" ]]; then
            sudo yum install -y nodejs npm
        else
            echo "${COLOR_RED}❌ 无法自动安装Node.js，请手动安装后重试${COLOR_RESET}"
            exit 1
        fi
    fi
    
    # 验证Node.js安装
    if ! node -v >/dev/null 2>&1; then
        echo "${COLOR_RED}❌ Node.js安装失败，请手动安装后重试${COLOR_RESET}"
        exit 1
    fi
}

# 克隆仓库

clone_repository() {
    echo "${COLOR_BLUE}⬇️ 下载imgresizer工具...${COLOR_RESET}"
    
    # 清理旧安装（如果存在）
    rm -rf "$INSTALL_DIR" >/dev/null 2>&1
    
    # 创建安装目录并进入
    mkdir -p "$INSTALL_DIR"
    
    # 使用git克隆仓库
    cd "$INSTALL_DIR" || exit 1
    git clone --depth=1 "$REPO_URL" .
    
    if [ $? -ne 0 ]; then
        echo "${COLOR_RED}❌ 克隆仓库失败，请检查网络连接后重试${COLOR_RESET}"
        exit 1
    fi
    
    echo "${COLOR_GREEN}✅ 下载完成${COLOR_RESET}"
}


# 安装NPM依赖
install_npm_dependencies() {
    echo "${COLOR_BLUE}📦 安装依赖库...${COLOR_RESET}"
    
    cd "$INSTALL_DIR" || exit 1
    
    # 首先尝试安装sharp
    echo "${COLOR_BLUE}🔧 安装sharp模块...${COLOR_RESET}"
    npm install sharp@0.32.6 --platform=darwin --arch=x64 2>npm-error.log
    
    if [ $? -ne 0 ]; then
        echo "${COLOR_RED}❌ sharp模块安装失败${COLOR_RESET}"
        echo "错误信息："
        cat npm-error.log
        exit 1
    fi
    
    # 安装其他依赖
    echo "${COLOR_BLUE}📦 安装其他依赖...${COLOR_RESET}"
    npm install --omit=optional 2>npm-error.log
    
    if [ $? -eq 0 ]; then
        echo "${COLOR_GREEN}✅ 依赖安装完成${COLOR_RESET}"
        echo "${COLOR_BLUE}🚀 启动imgresizer...${COLOR_RESET}"
        node "$INSTALL_DIR/imgresizer-cli.js" --help
    else
        echo "${COLOR_RED}❌ 依赖安装失败${COLOR_RESET}"
        echo "错误信息："
        cat npm-error.log
        exit 1
    fi
}

# 创建命令行链接
create_symlink() {
    echo "${COLOR_BLUE}🔗 创建命令行链接...${COLOR_RESET}"
    
    # 确保目标脚本具备可执行权限
    chmod +x "$INSTALL_DIR/imgresizer-cli.js"
    
    # 为工具创建符号链接
    sudo ln -sf "$INSTALL_DIR/imgresizer-cli.js" "$BIN_PATH" 2>/dev/null
    
    # 检查权限问题
    if [ $? -ne 0 ]; then
        echo "${COLOR_YELLOW}⚠️ 需要管理员权限创建全局命令链接${COLOR_RESET}"
        sudo -v
        sudo ln -sf "$INSTALL_DIR/imgresizer-cli.js" "$BIN_PATH"
    fi
    
    # 显式设置符号链接权限
    sudo chmod +x "$BIN_PATH"
    
    echo "${COLOR_GREEN}✅ 命令行工具安装完成${COLOR_RESET}"
}

# 更新工具
update_tool() {
    echo "${COLOR_BLUE}🔄 更新imgresizer...${COLOR_RESET}"
    
    # 备份当前目录
    local current_dir=$(pwd)
    
    # 进入安装目录并拉取最新代码
    cd "$INSTALL_DIR" || exit 1
    
    # 检查是否存在 .git 目录
    if [ -d ".git" ]; then
        echo "${COLOR_BLUE}🔁 正在拉取最新代码...${COLOR_RESET}"
        git pull origin master --rebase
    else
        echo "${COLOR_BLUE}⬇️ 正在重新克隆仓库...${COLOR_RESET}"
        rm -rf "$INSTALL_DIR"/*
        git clone --depth=1 "$REPO_URL" .
    fi
    
    # 重新安装依赖
    echo "${COLOR_BLUE}📦 更新依赖...${COLOR_RESET}"
    npm install sharp@0.32.6 --platform=darwin --arch=x64 --force
    npm install --omit=optional --silent --no-progress
    
    # 更新命令行链接
    sudo ln -sf "$INSTALL_DIR/imgresizer-cli.js" "$BIN_PATH"
    
    # 返回原目录
    cd "$current_dir" || exit 1
    
    echo "${COLOR_GREEN}✅ 更新完成${COLOR_RESET}"
}


# 完成提示
show_completion() {
    echo ""
    echo "${COLOR_GREEN}🎉 imgresizer安装完成！${COLOR_RESET}"
    echo ""
    echo "使用方式："
    echo "   ${COLOR_BLUE}imgresizer [图片路径]${COLOR_RESET}"
    echo ""
    echo "例如："
    echo "   imgresizer ~/Pictures/my-photo.jpg"
    echo ""
    echo "输出文件将保存在原图片同一目录下，文件名格式为：原始名称_resized.png"
    echo ""
}

# 主安装流程
main() {
    # 检查是否已安装
    check_installed
    
    # 安装依赖
    install_dependencies
    
    # 克隆仓库
    clone_repository
    
    # 安装NPM依赖
    install_npm_dependencies
    
    # 创建命令行链接
    create_symlink
    
    # 显示完成信息
    show_completion
}

main "$@"